Computer networks have become ubiquitous in the home, office and industrial environment. Networks using packet routing and switching technology are widespread. As computer networks have grown more complex, automated mechanisms for organizing and managing networks have emerged. These mechanisms are generally implemented in the form of computer programs that are known as network management systems.
FIG. 1 is a simplified diagram of a network 100 that is managed by a network management station 200, within which the present invention may be used. The network 100 comprises one or more network devices 102, such as switches, routers, bridges, gateways and other devices. Each network device 102 is coupled to another network device 102 or to one or more end stations 120. Each end station 120 is a terminal node of the network 100 at which some type of work is carried out. For example, an end station is a workstation, a server or similar device.
Each network device 102 executes an operating system 110. An example of such an operating device is the Internetworking Operating System (“IOS”) commercially available from Cisco Systems, Inc. of San Jose, Calif. Each network device 102 also executes one or more applications 112 under control of or embedded within the operating system 110. The operating system 110 supervises operation of the applications 112 and communicates over network connection 104 using an agreed-upon network communication protocol, such as Simple Network Management Protocol (“SNMP”). Typically, an SNMP agent within operating system 110 performs SNMP operations and responds to SNMP queries from external programs.
SNMP provides a systematic way of monitoring and managing a computer network and has become the standard in network management. SNMP facilitates exchange of management information between managed devices. Using data that is transported using SNMP, referred to as managed objects (such as packets per second and network error rates), users and application programs can more easily manage network performance, configure and provision network devices, find and solve network problems, and plan for network growth. A user with network management station 10, or applications running on station 10, can use SNMP to retrieve or modify information about the status or which is part of the configuration of the network device.
SNMP is defined in multiple versions known as Version 1 (abbreviated herein as “SNMPv1”); Version 2 (“SNMPv2”); Community-based SNMP Version 2 (“SNMPv2c”); and Version 3 (“SNMPv3”). All the versions share the same basic structure, components and architecture. In general, information in an SNMP-enabled device is stored in the form of a plurality of managed objects that are arranged in an object tree. Each object has one or more corresponding object instances, each of which has a unique object identifier (“OID”). Values of object instances are stored in tables in device memory; the names of the tables correspond to the names of the managed objects. Network management stations also track the names of tables and their corresponding OIDs in anticipation of the time when they will issue requests for such OIDs to the SNMP-enabled device.
Many networks contain components manufactured by several different companies. In order for the management station to communicate effectively with these various devices, the nature of the information maintained by the agents must be rigidly specified. SNMP therefore describes the exact information each agent must maintain and the format in which it must be maintained in data structures called management information bases (“MIBs”).
Each device 102 stores its current configuration, and other information, in a management information base 114. Information in the MIB 114 is organized in one or more tables of one or more MIB variables. The network management station 10 can send fetch and set commands to the device 102 to retrieve or set values of MIB variables. Examples of MIB variables include SysObjID or SysOID. A description of SNMP, MIBs and the type of MIB information that may be supported by a device is described in Ford, et al., “Internetworking Technologies Handbook” (Indianapolis, Ind.: Cisco Press, 2001), Chapter 56, and Perkins et al., “Understanding SNMP MIBs”, ISBN 0-13-437708-7.
Network management based on these open standards of SNMP needs customization for specific routers. Part of the information is present in standard MIBs published by standards bodies such as the IETF (e.g., RFCs 1212, 2790, etc). Many objects not covered in generic specifications (standard MIBs) are covered by vendor specific enterprise MIBs. Objects covered by these MIBs (standard and enterprise) may have complex relationships that are difficult to encapsulate with SNMP. A simple example is re-ordering various tables conveying the same data but indexed on different variables. A change to one cannot be conveyed to another using SNMPv2. More complex cause-fate relationships cannot be encapsulated as well.
Thus, a fundamental limitation of SNMP is that it provides no language to process cause-fate relationships other than in elaborate descriptions, thereby leaving it up to human implementers to implement the relationships. These implementations fall outside the scope of SNMP specifications.
Further, the customization of enterprise MIBs has to follow a formal process, and hence it is time-consuming. If a new set of counters is needed to monitor a specific aspect of a router, the turnaround time for those who review and approve MIB organization is at least in the order of weeks.
SNMP event notification uses traps to unilaterally notify changes. Regular polling has to be initiated by SNMP manager and is done on a regular basis. However, there is no easy mechanism under SNMP to setup a periodic update from the router (SNMP agent) to the SNMP manager.
In addition, simple tasks such as configuring voice classes of service, etc., which are relatively static, can easily be provided by SNMP. However, parameter values relating to dynamically managed configurations, such as class-based resource reservation setup protocol (“RSVP”), or resource aggregation (based on the time of day, call profile based on geographic location, etc.), are not easy to encapsulate in SNMP MIBs.
JAVA™ is an object-oriented programming language and environment developed by Sun Microsystems, Inc. Java allows for the creation of abstract classes known as interfaces, which allow a program to define methods that may be shared with several classes without regard for how other classes are handling the methods. Java provides a mechanism to distribute software and extends the capabilities of programmers to write an applet once and run it on any Java-enabled machine. Java can transport objects, use programming to encapsulate complex cause-fate relationships among objects and program threads for periodic updates.
A virtual machine, such as the Java Virtual Machine (“JVM”) commercially available by Sun Microsystems, Inc., is a virtual software element that resides only in memory. Code for many flavors of the JVM (called “KVM”, “CVM”, “Embedded Java”, etc.) is available for porting to various platforms. A virtual machine allows applications written in a specific programming language to be portable across different hardware environments and operating systems. To enable a Java application to execute on different types of data processing systems, a compiler typically generates an architecture-neutral file format—the compiled code is executable on many processors, given the presence of the Java run-time system. The Java compiler generates bytecode instructions that are non-specific to particular computer architectures. A bytecode is a machine independent code generated by the Java compiler and executed by a Java interpreter. A Java interpreter is a module in the JVM that alternatively decodes and executes a bytecode or bytecodes. These bytecode instructions are designed to produce, when executed, the same results on every JVM irrespective of the underlying CPU or architecture, and are translated on the fly into native machine code.
“Native code” refers to computer programs and instructions that are designed to be directly executed by computers using a specific computer architecture. For example, “68000” code is a type of native code that is designed for execution on systems using Motorola 68000 series microprocessors, and “SPARC” code is a type of native code that is designed for execution on computer systems using Sun Microsystems' SPARC series microprocessors. Java bytecode programs, by way of contrast, are computer architecture neutral in that they can be executed on any computer system that has a Java virtual machine.
The virtual machine mediates between the application and the underlying platform, converting the applications' bytecodes into machine-level code appropriate for the hardware and operating system being used. In addition to governing the execution of an application's bytecodes, the virtual machine handles related tasks such as managing the system's memory, providing security against malicious code and managing multiple threads of program execution.
However, despite its versatility, Java is not useful for real-time applications. The JVM includes an instruction that allocates memory for a new object, but includes no instruction for freeing that memory. The JVM is responsible for deciding whether and when to free memory occupied by objects that are no longer referenced by the running application. Usually, the JVM uses a garbage collector thread to automatically retain the memory used by objects that are no longer referenced by the running application. However, due to the non-real time nature of its garbage collector, Java is not considered suitable for real time applications.
Based on the foregoing, there is a clear need to provide improved management of network devices by enabling dynamic configuration of networks.
In particular, there is a need for a simplified way to configure dynamically managed network protocols and parameters, such as class-based RSVP resource aggregation based on time of day or call profile based on geographic location.
There is also a need for an application that is more adaptable to a network management system based on inherent programmability, in order to display real-time data such as call monitoring statistics.
There is a need for a method to reduce management traffic over the network by downloading simple management tasks to the network device in the form of applets written in high-level source language. Examples of such management include periodic updates from the device, consolidation of event logs and user specific control and monitoring tasks not involving internal device functions.
Based on the above needs, there is also a need to open a set of interfaces to an operating system to users in a well-known programming language.
Finally, there is a need to combine the real time control of an operating system with the flexibility of a high level source language, such as Java, for distributed computing for improved management of network systems.